Rust製の高速 AWS Lambda ランタイム「LLRT」をSAMで動かす
Introduction
先日,AWSはexperimentalなものとしてAWS Lambdaに特化した
JavaScriptランタイムのLLRT(Low Latency Runtime)を公開しました。
これはRustで実装されており、JavaScriptエンジンにはQuickJSを使っています。
LLRTを使うことでコールドスタート時間や
実行速度が高速になったりします。
そのあたりについては他にもいろいろ解説されてるし、
そのうち弊社のプロたちが詳細な記事を書くと思うので省略。
実際にLLRTをゼロから動かそうとすると、
(いまのところ)けっこう面倒です。
そうおもってたらSAMでサンプル動かすPRがでてたので、
それをやってみました。
Environments
- MacBook Pro (13-inch, M1, 2020)
- OS : MacOS 14.3.1
- SAM CLI : 1.109.0
Try
LambdaでLLRTを利用するには、Lambdaのランタイムとして
OS-only runtime (al2/al2023)を指定して、
LLRTのバイナリ(bootstrap)をバンドルすればよいとのことです。
Githubにはesbuildしてhogehogeする手順が記述してあるのですが、
とりあえず動かしたい人は、
SAMを使うサンプル(現時点ではPR段階)があるのでそれを
使いましょう。(他力本願)
Githubからclone(PRはマージされてました)してサンプルを動かしましょう。
Githubからcloneしてbuild&deploy
このPRにあるfork先のブランチを持ってきます。
llrtのリポジトリをcloneします。
% git clone https://github.com/awslabs/llrt.git % cd llrt/example/llrt-sam/
template.yamlは下記のようになってます。
Runtimeにprovided.al2023を指定して、
BuildMethodにmakefileを指定しています。
・・・ Resources: LlrtLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: . CompatibleRuntimes: - provided.al2023 Metadata: BuildMethod: makefile HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: provided.al2023 Architectures: - x86_64 Layers: - !Ref LlrtLayer Metadata: # Manage esbuild properties BuildMethod: esbuild BuildProperties: External: - '@aws-sdk' - '@smithy' - uuid Minify: false Target: "es2020" Sourcemap: false Format: esm OutExtension: - .js=.mjs EntryPoints: - app.ts ・・・
Makefileは下記。
Githubのreleasesページからllrt.zipをダウンロードしてきて
bootstapをつくってます。
build-LlrtLayer: curl -s https://api.github.com/repos/awslabs/llrt/releases/latest | grep "llrt-lambda-x64.zip" | cut -d : -f 2,3 | tail -1 | xargs curl -o llrt.zip -L unzip llrt.zip mv bootstrap $( )
後はbuild&deployすればよいです。
実際に試したら問題なくデプロイされ、動作確認できました。
% sam --version SAM CLI, version 1.109.0 % cd /path/your/llrt/example/llrt-sam/ % sam build % sam deploy --guided
使い終わったらきれいにしておきしょう。
% sam delete --region <デプロイしたリージョン>